/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 苏李涛
 * Date: 2024-11-11
 * Time: 0:25
 */

/**
 * Z 字形变换：
 */
public class Demo {
    /**
     * 方法一：
     思路：随着方向的改变，行数也改变，然后放置字符

     */

    // public static String convert(String ss, int numRows) {
    //     if(numRows == 1){
    //         return ss;
    //     }

    //     char[] s = ss.toCharArray();

    //     String[] array = new String[numRows];
    //     Arrays.fill(array, "");//上面默认会赋值null，这里要赋值一下

    //     //方向变量向下行数+1； 方向变量向上行数-1
    //     boolean down = false;
    //     for(int i = 0,row = 0; i < s.length; i++){
    //         array[row] += s[i];

    //         //如果方向到第一行或者最后一行，要改变
    //         if(row == 0 || row == numRows-1){
    //             down = !down;
    //         }
    //         row += down ? 1 : -1;
    //     }

    //     StringBuilder stringBuilder = new StringBuilder();
    //     for(String x : array){
    //         stringBuilder.append(x);
    //     }

    //     return stringBuilder.toString();
    // }



    //方法二：
    public static String convert(String ss, int numRows) {
        if(numRows == 1) return ss;

        char[] s = ss.toCharArray();
        int d = 2 * numRows - 2;
        int n = s.length;

        StringBuilder ret = new StringBuilder();

        //1.处理第一行
        for(int i = 0; i < n; i+=d)
            ret.append(s[i]);

        //2.枚举处理中间行
        for(int k = 1; k < numRows-1; k++)
            for(int i = k, j = d-i; i < n || j < n; i += d,j += d){
                if(i < n) ret.append(s[i]);
                if(j < n) ret.append(s[j]);
            }

        //1.处理最后一行
        for(int i = numRows-1; i < n; i+=d)
            ret.append(s[i]);


        return ret.toString();
    }
}
